const http = require('http');
const fs = require('fs');
const mysql = require('mysql');
const io = require('socket.io');
const url = require('url');
// const regs=require('./libs/regs');
let db = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: 'root',
    database: '20181211'
})
//1.创建服务 普通http
// let httpServer = http.createServer((req, res) => {
//     //reg.url=>'/reg?user=1111&pass=xxx'
//     let {pathname,query}=url.parse(req.url,true);

//         if (pathname == '/reg') {
//             //注册接口
//             let {user,pass}=query;
//             // 1.校验数据
//             if(!/^\w{6,32}$/.test(user)){
//                 res.write(JSON.stringify({code:1,msg:'用户名不符合规范'}));
//                 res.end();
//             }else if(!/^.{6,32}$/.test(pass)){
//                 res.write(JSON.stringify({code:1,msg:'密码不符合规范'}));
//                 res.end();
//             }else{
//                 db.query(`SELECT * FROM user_table WHERE username='${user}'`,(err,data)=>{
//                     if(err){
//                         res.write(JSON.stringify({code:1,msg:'数据库有错,查询失败'}))
//                         res.end()
//                     }else if(data.length>0){
//                         res.write(JSON.stringify({code:1,msg:'此用户名已存在'}))
//                         res.end()
//                     }else{
//                         db.query(`INSERT INTO user_table (username,password,online) VALUES('${user}','${pass}',0)`,err=>{
//                             if(err){
//                                 res.write(JSON.stringify({code:1,msg:'数据库有错,写入失败',data:`INSERT INTO user_table (username,password,online) VALUES('${user}','${pass}'.0)`}))
//                                 res.end()
//                             }else{
//                                 res.write(JSON.stringify({code:0,msg:'注册成功'}))
//                                 res.end()
//                             }
//                         })
//                     }
//                 })
//             }
//             console.log('请求了注册',query);
//         } else if (pathname == '/login') {
//             //登陆接口
//             let {user,pass}=query;
//             if(!/^\w{6,32}$/.test(user)){
//                 res.write(JSON.stringify({code:1,msg:'用户名不符合规范'}))
//                 res.end()
//             }else if(!/^.{6,32}$/.test(pass)){
//                 res.write(JSON.stringify({code:1,msg:'密码不符合规范'}))
//                 res.end()
//             }else{
//                 db.query(`SELECT ID,password FROM user_table WHERE username='${user}'`,(err,data)=>{
//                     if(err){
//                         res.write(JSON.stringify({code:1,msg:'数据库有错,查询失败'}))
//                         res.end()
//                     }else if(data.length==0){
//                         res.write(JSON.stringify({code:1,msg:'此用户不存在'}))
//                         res.end()
//                     }else if(data[0].password!=pass){
//                         res.write(JSON.stringify({code:1,msg:'用户名或密码错误'}))
//                         res.end()
//                     }else{

//                         db.query(`UPDATE user_table SET online=1 WHERE ID=${data[0].ID}`,err=>{
//                             if(err){
//                                 console.log(data[0].ID,err)
//                                 res.write(JSON.stringify({code:1,msg:'数据库错误'}))
//                                 res.end()
//                             }else{
//                                 res.write(JSON.stringify({code:0,msg:'登陆成功'}))
//                                 res.end()
//                             }
//                         })
//                     }
//                 })
//             }
//         } else {
//             //请求文件
//             fs.readFile(`www${pathname}`, (err, data) => {
//                 if (err) {
//                     res.writeHead(404);
//                     res.write('NOT found');
//                 } else {
//                     res.write(data);
//                 }
//                 res.end();
//             })
//         }

//     }

// );
let httpServer = http.createServer((req, res) => {
    fs.readFile(`www${req.url}`, (err, data) => {
        if (err) {
            res.writeHead(404);
            res.write('NOT found');
        } else {
            res.write(data);
        }
        res.end();
    })
});
httpServer.listen(8080);
let aSock=[];
let wsServer = io.listen(httpServer);
wsServer.on('connection', sock => {
    let cur_username='';
    let cur_userId=0;
    aSock.push(sock);
    sock.on('reg', (user, pass) => {
        if (!/^\w{6,32}$/.test(user)) {
            sock.emit('reg_ret', '1', '用户名不符合规范')
        } else if (!/^.{6,32}$/.test(pass)) {
            sock.emit('reg_ret', '1', '密码不符合规范')
        } else {
            db.query(`SELECT ID FROM user_table WHERE username='${user}'`,(err,data)=>{
                if(err){
                    sock.emit('reg_ret','1','数据库错误,查询失败')
                }else if(data.length>0){
                    sock.emit('reg_ret','1','用户名已存在')
                }else{
                    db.query(`INSERT INTO user_table (username,password,online) VALUES('${user}','${pass}',0)`,err=>{
                        if(err){
                            console.log(err)
                            sock.emit('reg_ret','1','数据库错误,写入失败')
                        }else{
                            sock.emit('reg_ret','0','注册成功')
                        }
                    });
                }
            })
        }
    })
    sock.on('login', (user, pass) => {
        if (!/^\w{6,32}$/.test(user)) {
            sock.emit('login_ret', '1', '用户名不符合规范')
        } else if (!/^.{6,32}$/.test(pass)) {
            sock.emit('login_ret', '1', '密码不符合规范')
        } else {
            db.query(`SELECT ID,password FROM user_table WHERE username='${user}'`,(err,data)=>{
                if(err){
                    sock.emit('login_ret','1','数据库错误,查询失败')
                }else if(data.length==0){
                    sock.emit('login_ret','1','此用户不存在')
                }else if(data[0].password!=pass){
                    sock.emit('login_ret','1','密码有错误')
                }else{
                    db.query(`UPDATE  user_table SET online=1 WHERE ID=${data[0].ID}`,err=>{
                        if(err){
                            console.log(err)
                            sock.emit('login_ret','1','数据库错误,写入失败')
                        }else{
                            sock.emit('login_ret','0','登录成功');
                            cur_username=user;
                            cur_userId=data[0].ID;
                        }
                    });
                }
            })
        }
    })
    sock.on('disconnect',function(){
        db.query(`UPDATE  user_table SET online=0 WHERE ID=${cur_userId}`,err=>{
            console.log(cur_username+'下线,id为'+cur_userId)
             cur_username='';
             cur_userId=0;
             aSock.filter(item=>item!=sock);
        })
    })
    sock.on('msg',txt=>{
        if(!txt){
            sock.emit('msg_ret','1','消息不能为空');
        }else{
            aSock.forEach(item=>{
                if(item==sock)return;
                item.emit('msg',cur_username,txt)
            })
            sock.emit('msg_ret','0','发送成功');
        }
    })
})